package com.guyu.app.admin.config.satoken;

import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.interceptor.SaInterceptor;
import com.guyu.app.common.constant.StpKit;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {

    // 注册 Sa-Token 拦截器，打开注解式鉴权功能
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册 Sa-Token 拦截器，校验规则为 StpUtil.checkLogin() 登录校验。
        registry.addInterceptor(new SaInterceptor(handle -> StpKit.ADMIN.checkLogin()))
                .addPathPatterns("/a/**");
    }


    // Sa-Token 参数配置，参考文档：https://sa-token.cc
    // 此配置会覆盖 application.yml 中的配置
    @Bean
    @Primary
    public SaTokenConfig getSaTokenConfigPrimary() {
        return new SaTokenConfig()
                .setTokenName("Authorization")
                .setTokenPrefix("Bearer")
                .setTimeout(60 * 60 * 24 * 30)     // token有效期，单位s 默认30天
                .setActiveTimeout(60 * 60 * 24 * 3)// Token 临时有效期 （指定时间内无操作就视为token过期） 单位: 秒, 默认-1 代表不限制 （例如可以设置为1800代表30分钟内无操作就过期）
                .setIsConcurrent(false)             // 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
                .setIsShare(false)                 // 在多人登录同一账号时，是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
                .setJwtSecretKey("hTWn2Jrc0K3xeXVw") //jwt秘钥
                .setIsReadBody(false)
                .setIsReadCookie(false)
                .setIsReadHeader(true)
                .setIsLog(true);
    }

}
